// 抽取公共请求部分到js文件中，便于维护且降低系统耦合性
// 播放URL：http://music.163.com/song/media/outer/url?id=454828887.mp3
// 歌曲API：https://music.163.com/api/song/enhance/player/url?id=454828887&ids=[454828887]&br=3200000
// 歌词API：https://music.163.com/api/song/lyric?os=pc&id=454828887&lv=-1&kv=-1&tv=-1

import axios from "axios"

// 这里只是创建一个网络请求实例，还可以创建其他的实例，然后导出就行了
const request = function (config) {
	// 创建axios实例
	const instanceAxios = axios.create({
		// 设置基础url，请求路径的前缀
		baseURL: "/api",
		// 设置超时时间为3秒
		timeout: 2000,
	})

	// 拦截器设置，这个拦截器会拦截所有通过自己定义的实例instanceAxios发送出的请求和收到的响应
	// 请求时拦截，响应时拦截
	// instanceAxios.interceptors.request.use(config)
	// instanceAxios.interceptors.response.use(config)
	// 拦截用户的请求，并对用的请求做一些设置
	instanceAxios.interceptors.request.use(
		(config) => {
			console.log("拦截器请求测试", config)
			// 这里可以对请求做一些修改，一些应用场景如下：
			// 1、比如请求中的某些信息不符合要求，比如设置headers信息等
			// 2、比如登录或者加载某些文件时可能显示一个登录中或者加载中的提示信息
			// 3、比如登录验证，需要判断用户是否登录，如果没有登录则跳转到登录页面提示登录

			// 注意这里修改完成之后需要返回config，否则无法进行后续工作
			return config
		},
		(err) => {
			// 拦截失败或者上述未返回config，则提示错误信息
			console.log(err)
		},
	)

    // 拦截响应信息测试
	instanceAxios.interceptors.response.use(
		(res) => {
			console.log("拦截器响应测试", res.data)
		},
		(err) => {
			// 拦截失败或者上述未返回config，则提示错误信息
			console.log(err)
		},
	)

	// 实际请求
	return instanceAxios(config)
}
// 上述的方法中需要自己传入一些请求配置，包括请求url，参数等。

/**
 * 在这个文件夹中其实是可以写一些请求函数的，在需要使用的时候调用即可，上述操作只是对axios做了一点简单的封装，并没有进行公共方法的抽取
 */

// 抽取方法，获取歌曲的方法，这直接返回获取的结果，不需要用户设置url，如果是post方法则需要用户传入相应的参数
// const _getSongs = () => {
// 	return axios.get({
// 		url: "/enhance/player/url",
// 		// 参数值
// 		params: {
// 			id: "454828887",
// 			ids: "454828887",
// 			br: "3200000",
// 		},
// 	})
// }
// export { _getSongs }

export { request }
